/**
 * 文件验证模块
 * 提供文件验证相关的功能
 */
import { ElMessage } from 'element-plus';

/**
 * 验证文件格式和大小
 * @param {File} file - 文件对象
 * @param {Object} options - 验证选项
 * @param {String} options.accept - 接受的文件类型，如".jpg,.jpeg,.png"
 * @param {Number} options.maxSize - 文件大小限制（MB）
 * @returns {Object} - 验证结果对象 {valid: boolean, message: string}
 */
export const validateFile = (file, options) => {
  const { accept, maxSize } = options;
  const result = { valid: true, message: '' };
  
  // 检查文件格式
  const fileName = file.name.toLowerCase();
  const fileType = file.type;
  const acceptedTypes = accept.split(',').map(type => type.trim());
  
  // 检查是否符合接受的类型
  const isTypeValid = acceptedTypes.some(type => {
    // 处理类似 .jpg 格式
    if (type.startsWith('.')) {
      return fileName.endsWith(type.toLowerCase());
    }
    // 处理类似 image/jpeg 格式
    return fileType === type;
  });
  
  if (!isTypeValid) {
    const acceptDisplay = acceptedTypes.join('、');
    result.valid = false;
    result.message = `只能上传 ${acceptDisplay} 格式的文件!`;
    return result;
  }
  
  // 检查文件大小
  const fileSizeMB = file.size / 1024 / 1024;
  if (fileSizeMB >= maxSize) {
    result.valid = false;
    result.message = `文件大小不能超过 ${maxSize}MB!`;
    return result;
  }
  
  return result;
};

/**
 * 在上传前验证文件
 * 同时会显示验证失败的提示消息
 * @param {File} file - 文件对象
 * @param {Object} options - 验证选项
 * @param {String} options.accept - 接受的文件类型
 * @param {Number} options.maxSize - 文件大小限制（MB）
 * @returns {Boolean} - 是否验证成功
 */
export const beforeImageUpload = (file, options) => {
  console.log('beforeImageUpload 被调用:', file.name);
  
  const { valid, message } = validateFile(file, options);
  
  if (!valid) {
    ElMessage.error(message);
    
    // 添加自定义标记，让handleImageChange知道这个文件已被拒绝
    file._rejected = true;
    
    return false;
  }
  
  // 通过验证
  return true;
};

export default {
  validateFile,
  beforeImageUpload
}; 